<?php
namespace app\common\controller;

use think\Controller;
use think\Request;

/**
 * 控制器基类
 */

class Base extends Controller
{

    protected $model;
    protected $beforeActionList;

    public function _initialize()
    {
        header("Access-Control-Allow-Origin: *");
    }
    /**
     * 列表
     */
    public function doList(Request $request)
    {
        $res = $this->model->doList();

        return json($res);
    }

    /**
     * 添加
     */
    public function add(Request $request)
    {

        $id = $this->model->doAdd($request);

        $output['data'] = $id;
        $output['success'] = $id ? true : false;
        $output['msg'] = $id ? '新增成功' : '新增失败';

        return json($output);
    }

    /**
     * 删除
     *
     * 接收输入变量id之后删除相应记录
     *
     * @return   void
     */
    public function delete(Request $request)
    {

        $affected = $this->model->doDelete($request);

        //返回结果
        $output['data'] = $affected;
        $output['success'] = $affected ? true : false;
        $output['msg'] = $affected ? '删除成功' : '删除失败';

        return json($output);
    }

    /**
     * 批量删除
     *
     * 接收json类型的id输入变量，解码之后删除数组记录
     *
     * @return   void
     */
    public function batDelete(Request $request)
    {

        $affected = $this->model->doBatDelete($request);

        //返回结果
        $output['data'] = $affected;
        $output['msg'] = $affected ? '删除成功' : '删除失败';
        $output['success'] = $affected ? true : false;

        return json($output);
    }

    /**
     * 更新
     */
    public function update(Request $request)
    {

        $res = $this->model->doUpdate($request);

        $output['data'] = $res;

        if ($res) {
            $output['success'] = true;
        } else {
            $output['success'] = false;
        }
        //$output['success'] = $res ? true ：false;
        $output['msg'] = $res ? '更新成功' : '更新失败';

        return json($output);
    }

    /**
     * 批量更新
     */
    public function batUpdate(Request $request)
    {
        $res = $this->model->doBatUpdate($request);
        return json($res);
    }

    /**
     * 设置分页
     *
     * 接收 page页码输入变量，limit分页条数输入变量，start分页起始索引号输入变量
     * 然后调用控制器数据模型类的分页设置函数
     *
     * @return   void
     */
    public function setPagination()
    {

        // 增加分页限制参数

        $page = input('?page') ? intval(input('page')) : 1; #是否预先设置了页码,如有没有则当前默认页码为1
        $rows = input('?limit') ? intval(input('limit')) : 25; #是否预先设置了单页面行数,如没有则按照每页行数为10
        $offset = input('?start') ? intval(input('start')) : ($this->page - 1) * $rows; #根据当前页码或请求参数设置偏移量

        $this->model->setPagination($page, $rows, $offset);
    }

    /**
     * 保存日志
     *
     * @param    array $output 返回信息
     * @param    boolean $authorized 登录标志
     * @return   void
     */
    public function doLog($output, $authorized = true)
    {
        try {
            //获取请求
            $data = getReq();
            $param = $this->getCallback($data['param']);

            //非转义转码
            $data['param'] = json_encode($param, JSON_UNESCAPED_UNICODE);
            $data['result'] = json_encode($output, JSON_UNESCAPED_UNICODE);

            //判断是授权日志或外部事件日志

            if ($authorized) {

                //获取操作用户信息

                $user = Session::get('CURRENT_USER');
                $data['staff_id'] = $user['user'];
                $data['staff_name'] = $user['cname'];
                $data['role_name'] = $user['role_name'];
            }

            $data['create_time'] = date("Y-m-d H:i:s");

            $Logs = new Logs;
            $Logs->save($data);

        } catch (\Exception $e) {
            throw new \think\Exception('异常消息:' . $e->getMessage());
        }
    }
}
